pull: Don't execute static deltas when mirroring
authorColin Walters <walters@verbum.org>
Fri, 22 Jul 2016 20:58:26 +0000 (16:58 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Mon, 25 Jul 2016 06:50:51 +0000 (06:50 +0000)
We don't presently support this, since the static delta code assumes
it can just `mmap()` file objects.  We could at some point implement
this, but for now just skip executing deltas when doing
`archive -> archive` mirroring.

I noticed this when trying to mirror a repo in Jenkins in
[CAHC](https://wiki.centos.org/SpecialInterestGroup/Atomic/Devel).

Closes: #408
Approved by: giuseppe

src/libostree/ostree-repo-pull.c
tests/pull-test.sh

index 82bf66f6a74dff905f2e29840a1cbb8360179cc0..0d342d3f908feca5952194e6248cb1dc3187cf06 100644 (file)
@@ -2705,7 +2705,8 @@ ostree_repo_pull_with_options (OstreeRepo             *self,
                                     &from_revision, error))
         goto out;
 
-      if (!disable_static_deltas && (from_revision == NULL || g_strcmp0 (from_revision, to_revision) != 0))
+      if (!disable_static_deltas && !pull_data->is_mirror &&
+          (from_revision == NULL || g_strcmp0 (from_revision, to_revision) != 0))
         {
           if (!request_static_delta_superblock_sync (pull_data, from_revision, to_revision,
                                                      &delta_superblock, cancellable, error))
index 8e8a693471b03067d3630b149f961c6f433d0a9e..b050e111011f3776ba2a43de25c60805f8bccc15 100755 (executable)
@@ -35,7 +35,7 @@ function verify_initial_contents() {
     assert_file_has_content baz/cow '^moo$'
 }
 
-echo "1..11"
+echo "1..12"
 
 # Try both syntaxes
 repo_init
@@ -57,6 +57,17 @@ ${CMD_PREFIX} ostree --repo=mirrorrepo fsck
 $OSTREE show main >/dev/null
 echo "ok pull mirror"
 
+cd ${test_tmpdir}
+rm checkout-origin-main -rf
+$OSTREE --repo=ostree-srv/gnomerepo checkout main checkout-origin-main
+echo moomoo > checkout-origin-main/baz/cow
+${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo commit -b main -s "" --tree=dir=checkout-origin-main
+${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo static-delta generate main
+${CMD_PREFIX} ostree --repo=ostree-srv/gnomerepo fsck
+${CMD_PREFIX} ostree --repo=mirrorrepo pull --mirror origin main
+${CMD_PREFIX} ostree --repo=mirrorrepo fsck
+echo "ok pull mirror (should not apply deltas)"
+
 cd ${test_tmpdir}
 mkdir mirrorrepo-local
 ${CMD_PREFIX} ostree --repo=mirrorrepo-local init --mode=archive-z2